<?

/////////////////////////////////////////////////////////////////////////////////////////
// Clase para Manejar Archivos de Texto
/////////////////////////////////////////////////////////////////////////////////////////
class DatabaseTXT {
	// Propiedades de la Conexion
	var $cDirectorio;
	var $cArchivo;

	// Propiedades para el manejo de resultsets
	var $idCon;
	var $aFields = array();
	var $aCabeceras = array();
	var $fd;
	var $cCabecera;
	var $cSeparadorCampo;
	var $cSeparadorRegistro;
	var $cDelimitadorCampos;
	var $bCab;
	var $nFila;
	

	function DatabaseTXT( $cDirectorio = "", $cArchivo = ""){
		$this->idCon = 0;

		if ( $cDirectorio != "" ) {			
			if ( !$this->connect($cDirectorio) ) 
				return false;
		}

		if ( $cArchivo != "" ) {
			if ( ! ($this->query($cArchivo) ) )
				return false;
		}
		
		return true;
	}

	function connect( $cDirectorio ) {
		if (file_exists($cDirectorio) ) {			
			if ( substr($cDirectorio, -1) != SEP_DIR ) 
				$cDirectorio .= SEP_DIR;
								
			$this->cDirectorio = $cDirectorio;
			return true;
		} else {
			return false;
		}
	}

	function query($cArchivo,$cCabecera,$cSeparadorCampo = ",", $cSeparadorRegistro = "\n", $cDelimitadorCampos = '"' ){
		// Open
		// $cCabecera =  1 -> tiene, 0 -> no tiene;
		if ($this->fd > 0)
			fclose ($fd);
						
		$this->fd = fopen ( $this->cDirectorio . $cArchivo, "r");
		if ($this->fd <= 0)
			return false;
		
		$this->cSeparadorCampo = $cSeparadorCampo;
		$this->cSeparadorRegistro = $cSeparadorRegistro;
		$this->cDelimitadorCampos = $cDelimitadorCampos;
		$this->cCabecera = $cCabecera;
		
		unset($this->aCabeceras);
				
		$bEnCampo = 0;
		$bFinRegistro = 0;
		$nqCamp = 0;
		$this->nFila = 0;
				
		if  ($this->cCabecera == 1 && empty($this->aCabeceras)){
			$cCaracter = fgetc($this->fd);
			
			while(!feof($this->fd) && $bFinRegistro == 0 ){					
				if($cCaracter == $this->cDelimitadorCampos){
					$bEnCampo = $bEnCampo == 1 ? 0 :1;
				} elseif( ($bEnCampo == 0 ) && ($cCaracter == $this->cSeparadorCampo)) {
					$nqCamp++ ;
				} else {
					$this->aCabeceras[$nqCamp].= $cCaracter;
				}				
				

				$bFinRegistro = ( ($bEnCampo == 0 ) &&  $cCaracter == $this->cSeparadorRegistro) ? 1: 0;									
				if ( $bFinRegistro == 0 ) {
					$cCaracter = fgetc($this->fd);
				}
			}
		}
		return true;
	}
	

	function moveNext() {
		if ($this->fd == 0)
		     return false;

		$nqCampos = 0;
		$this->aFields[0] = '';		
		$bEncampo = 0;
		$cValor = "";
		$bFinRegistro = 0;
		//$bEntreComillas = 0;
		$cCaracter = fgetc($this->fd);
//		echo "Linea :".$this->nFila ;
//		echo "<br>";
//		echo $this->cSeparadorCampo ." ". $this->cSeparadorRegistro ." ". $this->cDelimitadorCampos;
//		echo "<br>";
//		echo "<br>";
//		ext. 136.253/72
		while(!feof($this->fd) && $bFinRegistro == 0){
			if($cCaracter == $this->cDelimitadorCampos ){
				$bEncampo = $bEncampo == 1 ? 0 :1;
			} elseif( $bEncampo == 0 && $cCaracter == $this->cSeparadorCampo){
				$cdCampo = $this->aCabeceras[$nqCampos];
				$this->aFields[$nqCampos]= $cValor;
				$this->aFields[$cdCampo]= $cValor;
				$nqCampos++;
				$cValor = "";
				;
			} else {	        	       
				$cValor .= $cCaracter;
			}

			if ( $bEncampo == 0  && $cCaracter == $this->cSeparadorRegistro) {
				 	$bFinRegistro = 1;}
				 else{
				 	$bFinRegistro = 0;}
			if ( $bFinRegistro == 0 ) {
				$cCaracter = fgetc($this->fd);
			}
						
		}

		// Ultimo Campo
		$nqCampos++;
		$cdCampo = $this->aCabeceras[$nqCampos];
		$this->aFields[$nqCampos]= $cValor;
		$this->aFields[$cdCampo]= $cValor;
		$this->nFila++;
		// $cValor = "";
	
		if  ($this->cCabecera == 1){             // && !empty($this->aCabeceras)
			$nqCabeceras = count($this->aCabeceras);
			if(($nqCabeceras != $nqCampos ) && !feof($this->fd)){ // && !feof($this->fd)  || + 1
				// Mensaje de error
				echo "Error Fila $this->nFila: La cantidad de cabeceras ( $nqCabeceras ) es distinta a la cantidad de campos ( $nqCampos ) <br>";
				echo $this->aFields[$nqCampos] ." ".$this->aFields[$cdCampo] ." ---- <br>";
			}
		}
				
		return feof($this->fd) ? 0 : 1;           // return $this->aFields;
	}

}

?>
